﻿var ns = namespace("kaskelot.sp.ui");

ns.bemanningvakans = function () {
	var cookieName = "vakanssearch";

	function init() {
		$("#bemanningvakans-container #VakansValdistriktDropDownList").attr("disabled", "disabled");
		$("#title-container").html("Bemanning");

		var c = kaskelot.sp.ui.cookies.getCookie(cookieName);
		if (c != undefined) {
			$("#VakansValkretsDropDownList").val(c.valkretsId).trigger("liszt:updated");
			$("#VakansForsamlingDropDownList").val(c.forsamlingId).trigger("liszt:updated");
			$("#VakansValdistriktDropDownList").val(c.valdistriktId).trigger("liszt:updated");
			$("#VakansFunktionDropDownList").val(c.funktionId).trigger("liszt:updated");

			if (c.valdistriktId != "" || c.forsamlingId != "") {
				var list = $("#VakansValdistriktDropDownList");

				list.removeAttr("disabled");
				list.trigger("liszt:updated");
			}

			getList();
		}
		
		$("#bemanningvakans-container .chzn-select-deselect").chosen({ allow_single_deselect: true, disable_search: true });

		$("#bemanningvakans-container #VakansValkretsDropDownList").change(
			function () {
				getForsamlingar();
			}
		);

		$("#bemanningvakans-container #VakansForsamlingDropDownList").change(
			function () {
				getValdistrikt();
			}
		);

		$("#bemanningvakans-container #vakans-clear-button").click(
			function () {
				$("#VakansValkretsDropDownList").val("").trigger("liszt:updated");
				$("#VakansForsamlingDropDownList").val("").trigger("liszt:updated");
				$("#VakansValdistriktDropDownList").val("").trigger("liszt:updated");
				$("#VakansFunktionDropDownList").val("").trigger("liszt:updated");
			}
		);

		$("#bemanningvakans-container #vakans-search-button").click(
			function () {
				getList();
			}
		);

		$("#bemanningvakans-input-container").keypress(function (event) {
			if (event.which == 13) {
				getList();
			}
		});

		$("#toolbox-container").hide();
	}

	function getList() {
		// Parametrar
		var valkrets = $("#VakansValkretsDropDownList").val();
		var forsamling = $("#VakansForsamlingDropDownList").val();
		var valdistrikt = $("#VakansValdistriktDropDownList").val();
		var funktion = $("#VakansFunktionDropDownList").val();

		var data = { funktionId: funktion, valkretsId: valkrets, forsamlingId: forsamling, valdistriktId: valdistrikt };
		kaskelot.sp.ui.cookies.setCookie(cookieName, data);
		$("#bemanningvakans-container").block({ message: '<h1>Var god vänta...</h1>' });

		$.ajax({
			url: L_Menu_BaseUrl + "/_vti_bin/Kaskelot.SP.Resources/ClientBemanningService.svc/VakansSearch",
			type: "GET",
			data: data,
			processData: true,
			cache: false,
			success:
				function (data) {
					if (!data.VakansSearchResult.HasError) {
						$("#vakans-search-results tbody").html(
							$("#vakans-search-template").render(data.VakansSearchResult.Data)
						);
					}
					$("#bemanningvakans-container").unblock();
				},
			error:
				function (xhr) {
					$("#bemanningvakans-container").unblock();
					kaskelot.sp.ui.prompts.showErrorPrompt(xhr.responseText);
				}
		});
	}

	function getValdistrikt() {
		// Parametrar
		var forsamling = $("#VakansForsamlingDropDownList").val();
		var list = $("#VakansValdistriktDropDownList");

		if (forsamling === "") {
			list.html("");
			list.attr("disabled", "disabled");
			list.trigger("liszt:updated");
			return;
		}

		$("#VakansValdistriktDropDownList_chzn").block({ message: "" });

		$.ajax({
			url: L_Menu_BaseUrl + "/_vti_bin/Kaskelot.SP.Resources/ClientByggnadService.svc/GetValdistriktByForsamling",
			type: "GET",
			data: { forsamlingId: forsamling },
			processData: true,
			success:
				function (data) {
					if (!data.GetValdistriktByForsamlingResult.HasError) {
						var v = document.getElementById("VakansValdistriktDropDownList");
						v.innerHTML = "";

						for (var i = 0; i < data.GetValdistriktByForsamlingResult.Data.length; i++) {
							var opt = document.createElement("option");
							opt.value = data.GetValdistriktByForsamlingResult.Data[i].ValdistriktId;
							opt.text = data.GetValdistriktByForsamlingResult.Data[i].ValdistriktNamn;

							v.options.add(opt, 0);
						}

						v.selectedIndex = -1;

						list.trigger("liszt:updated");
					}

					$("#VakansValdistriktDropDownList_chzn").unblock();
					list.removeAttr("disabled");
					list.trigger("liszt:updated");
				},
			error:
				function (xhr) {
					$("#VakansValdistriktDropDownList_chzn").unblock();
					kaskelot.sp.ui.prompts.showErrorPrompt(xhr.responseText);
					if (xhr.responseText !== "") {
						alert(xhr.responseText);
					}
				}
		});
	}

	function getForsamlingar() {
		// Parametrar
		var valkrets = $("#VakansValkretsDropDownList").val();
		var list = $("#VakansForsamlingDropDownList");

		$("#VakansForsamlingDropDownList_chzn").block({ message: "" });

		$.ajax({
			url: L_Menu_BaseUrl + "/_vti_bin/Kaskelot.SP.Resources/ClientByggnadService.svc/GetForsamlingar",
			type: "GET",
			data: { valkretsId: valkrets },
			processData: true,
			success:
				function (data) {
					if (!data.GetForsamlingarResult.HasError) {
						var v = document.getElementById("VakansForsamlingDropDownList");
						v.innerHTML = "";

						for (var i = 0; i < data.GetForsamlingarResult.Data.length; i++) {
							var opt = document.createElement("option");
							opt.value = data.GetForsamlingarResult.Data[i].ForsamlingId;
							opt.text = data.GetForsamlingarResult.Data[i].ForsamlingNamn;

							v.options.add(opt, 0);
						}

						var x = document.createElement("option");
						v.options.add(x, 0);

						v.selectedIndex = -1;

						list.trigger("liszt:updated");
					}
					$("#VakansForsamlingDropDownList_chzn").unblock();
				},
			error:
				function (xhr) {
					$("#VakansForsamlingDropDownList_chzn").unblock();
					kaskelot.sp.ui.prompts.showErrorPrompt(xhr.responseText);
				}
		});
	}

	return {
		init: init,
		getList: getList,
		getValdistrikt: getValdistrikt,
		getForsamlingar: getForsamlingar
	};
}();